add ubuntu support

This commit is contained in:
jie 2021-10-21 10:13:09 +08:00
parent 41f0a38ec1
commit 0d0f2767b9
16 changed files with 184 additions and 17 deletions

1
.gitignore vendored
View File

@ -4,6 +4,7 @@ pgsql
x64
/WebApp/WebApp/log
/config.json
/build
# Prerequisites
*.d

7
BUILD-Windows.md Normal file
View File

@ -0,0 +1,7 @@
# Build
*Refer to [readme](dependencies/README-Windows.md) for setting up the dependencies.*
Use VS2019 to open `WebApp/WebApp.sln`, which is a sample project. Remember to properly configure the database and `config.json` before you `Run` the project.
> `bserv` and `WebApp` should be built in `Debug` or `Release` (`x64`), NOT (`Win32`/`x86`).

22
BUILD-ubuntu.md Normal file
View File

@ -0,0 +1,22 @@
# Build
*Refer to [readme](dependencies/README-ubuntu.md) for setting up the dependencies.*
shell:
```
mkdir build && cd build
cmake ..
cmake --build .
```
Assuming the shell is in `build`, you can run `WebApp` using:
```
cd WebApp/WebApp
./WebApp ../../../config.json
```
given that the database and `config.json` are properly configured.
> If some of the dynamically linked libraries are missing, try:
> ```
> sudo ldconfig
> ```

19
CMakeLists.txt Normal file
View File

@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 3.10)
project(bserv_project)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
link_directories(
dependencies/cryptopp
dependencies/libpqxx/src/.libs
)
add_subdirectory(WebApp/bserv)
add_subdirectory(WebApp/WebApp)

View File

@ -3,20 +3,14 @@
*A Boost Based C++ HTTP JSON Server.*
## Dependencies
- VS2019
- CMake
- PostgreSQL
> *The database may not be installed locally. You should be able to connect to it.*
*Refer to [readme](dependencies/README.md) for setting up the dependencies.*
## Quick Start
Use VS2019 to open `WebApp/WebApp.sln`, which is a sample project. [`config-example.json`](config-example.json) is a sample config file for `WebApp`'s startup parameters. **It should be renamed to `config.json` before you `Run` the project.**
> To build the dependencies & the project, refer to [`BUILD-Windows.md`](BUILD-Windows.md) or [`BUILD-ubuntu.md`](BUILD-ubuntu.md)
- `WebApp/bserv` contains the source code for `bserv`.
- `WebApp/WebApp` is a sample project.
- [`config-Windows.json`](config-Windows.json) and [`config-ubuntu.json`](config-ubuntu.json) are two sample config file for `WebApp`'s startup parameters. **It should be configured and renamed to `config.json` before you start `WebApp`.**
- To use `WebApp`, you should setup the database as well.
### Database

View File

@ -0,0 +1,21 @@
add_executable(
WebApp
handlers.cpp
rendering.cpp
WebApp.cpp
)
target_include_directories(
WebApp PUBLIC
../../dependencies/inja/include
../../dependencies/inja/third_party/include
)
target_link_libraries(
WebApp PUBLIC
bserv
)

View File

@ -96,7 +96,7 @@ int main(int argc, char* argv[]) {
bserv::placeholders::_1),
// serving html template files
bserv::make_path("/", &index,
bserv::make_path("/", &index_page,
bserv::placeholders::session,
bserv::placeholders::response),
bserv::make_path("/form_login", &form_login,

View File

@ -280,7 +280,7 @@ std::nullopt_t index(
return render(response, template_path, context);
}
std::nullopt_t index(
std::nullopt_t index_page(
std::shared_ptr<bserv::session_type> session_ptr,
bserv::response_type& response) {
boost::json::object context;

View File

@ -47,7 +47,7 @@ std::nullopt_t serve_static_files(
bserv::response_type& response,
const std::string& path);
std::nullopt_t index(
std::nullopt_t index_page(
std::shared_ptr<bserv::session_type> session_ptr,
bserv::response_type& response);

View File

@ -0,0 +1,36 @@
add_library(
bserv
pch.cpp
bserv.cpp
client.cpp
database.cpp
session.cpp
utils.cpp
)
target_include_directories(
bserv PUBLIC
../../dependencies
../../dependencies/libpqxx/include
include
)
target_link_libraries(
bserv PUBLIC
pthread
boost_thread
boost_context
boost_coroutine
boost_system
boost_filesystem
boost_log
boost_log_setup
boost_json
pqxx
pq
cryptopp
)

View File

@ -1,7 +1,9 @@
#ifndef _COMMON_HPP
#define _COMMON_HPP
#ifdef _MSC_VER
#define _WIN32_WINNT 0x0601
#endif
#include "client.hpp"
#include "config.hpp"
@ -13,4 +15,4 @@
#include "utils.hpp"
#include "websocket.hpp"
#endif // _COMMON_HPP
#endif // _COMMON_HPP

View File

@ -1,7 +1,9 @@
#ifndef _LOGGING_HPP
#define _LOGGING_HPP
//#define BOOST_LOG_DYN_LINK
#if defined(__GNUC__)
#define BOOST_LOG_DYN_LINK
#endif
#include <boost/log/core.hpp>
#include <boost/log/common.hpp>
@ -54,4 +56,4 @@ namespace bserv {
} // bserv
#endif // _LOGGING_HPP
#endif // _LOGGING_HPP

8
config-ubuntu.json Normal file
View File

@ -0,0 +1,8 @@
{
"port": 8080,
"thread-num": 2,
"conn-num": 4,
"conn-str": "postgresql://[username]:[password]@[url]:[port]/[db]",
"static_root": "../../../templates/statics",
"template_root": "../../../templates"
}

View File

@ -1,6 +1,13 @@
# Dependencies
To build the dependencies & the project itself, The following must be installed:
- Microsoft Visual Studio 2019 (VS2019)
- CMake
For each dependency, CMD is assumed to be in the directory of `dependencies`. So, the first command is always changing into the directory which contains the dependency.
## [Boost](https://www.boost.org/)
CMD:
@ -22,6 +29,8 @@ b2
# [PostgreSQL 14.0](https://www.postgresql.org/)
*The database may not be installed locally. You should be able to connect to it.*
1. Use this [link](https://get.enterprisedb.com/postgresql/postgresql-14.0-1-windows-x64-binaries.zip) to download the binaries.
2. Unzip the zip archive here. It should be named `pgsql` and contains `bin`, `include` and `lib`.

46
dependencies/README-ubuntu.md vendored Normal file
View File

@ -0,0 +1,46 @@
# Dependencies (Ubuntu)
To build the dependencies & the project itself, The following must be installed:
- g++
- make
- CMake
For each dependency, shell is assumed to be in the directory of `dependencies`. So, the first command is always changing into the directory which contains the dependency.
## [Boost](https://www.boost.org/)
shell:
```
cd boost
./bootstrap
./b2
sudo ./b2 install
```
## [Crypto++](https://cryptopp.com/)
shell:
```
cd cryptopp
make
```
# [PostgreSQL](https://www.postgresql.org/)
**The database should be installed locally.**
# [Libpqxx](https://github.com/jtv/libpqxx)
shell:
```
cd libpqxx
./configure
make
```
# [inja](https://github.com/pantor/inja)
*Nothing should be done...*