From 544c66edde01394d1867e8ad24a6fea0d0ab5f9e Mon Sep 17 00:00:00 2001 From: Rob Blanckaert Date: Sun, 3 Feb 2019 12:58:54 -0800 Subject: [PATCH] Make server 12-factor compatible. (#3546) * Docker * Herokuize * Use mysql method with database_url * cleanup --- Dockerfile | 8 +++----- servatrice/src/servatrice.cpp | 30 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index e96f3405..0c8951ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,18 +7,16 @@ RUN apt-get update && apt-get install -y\ git\ libprotobuf-dev\ libqt5sql5-mysql\ + libqt5websockets5-dev\ protobuf-compiler\ qt5-default\ qtbase5-dev\ qttools5-dev-tools\ - qttools5-dev\ - software-properties-common + qttools5-dev COPY . /home/servatrice/code/ WORKDIR /home/servatrice/code -RUN mkdir oracle - WORKDIR build RUN cmake .. -DWITH_SERVER=1 -DWITH_CLIENT=0 -DWITH_ORACLE=0 &&\ make &&\ @@ -28,4 +26,4 @@ WORKDIR /home/servatrice EXPOSE 4747 -ENTRYPOINT [ "servatrice" ] +CMD [ "servatrice", "--log-to-console" ] diff --git a/servatrice/src/servatrice.cpp b/servatrice/src/servatrice.cpp index 381aef2c..d9d08880 100644 --- a/servatrice/src/servatrice.cpp +++ b/servatrice/src/servatrice.cpp @@ -35,10 +35,12 @@ #include #include #include +#include #include #include #include #include +#include #include Servatrice_GameServer::Servatrice_GameServer(Servatrice *_server, @@ -790,6 +792,9 @@ bool Servatrice::getRegOnlyServerEnabled() const QString Servatrice::getAuthenticationMethodString() const { + if (QProcessEnvironment::systemEnvironment().contains("DATABASE_URL")) { + return QString("sql"); + } return settingsCache->value("authentication/method").toString(); } @@ -830,36 +835,58 @@ QString Servatrice::getRequiredFeatures() const QString Servatrice::getDBTypeString() const { + if (QProcessEnvironment::systemEnvironment().contains("DATABASE_URL")) { + return QString("mysql"); + } return settingsCache->value("database/type").toString(); } QString Servatrice::getDBPrefixString() const { + if (QProcessEnvironment::systemEnvironment().contains("DATABASE_URL")) { + return QString("cockatrice"); + } return settingsCache->value("database/prefix").toString(); } QString Servatrice::getDBHostNameString() const { + if (QProcessEnvironment::systemEnvironment().contains("DATABASE_URL")) { + return QUrl(QProcessEnvironment::systemEnvironment().value("DATABASE_URL")).host(); + } return settingsCache->value("database/hostname").toString(); } QString Servatrice::getDBDatabaseNameString() const { + if (QProcessEnvironment::systemEnvironment().contains("DATABASE_URL")) { + QString path = QUrl(QProcessEnvironment::systemEnvironment().value("DATABASE_URL")).path(); + return path.right(path.length() - 1); + } return settingsCache->value("database/database").toString(); } QString Servatrice::getDBUserNameString() const { + if (QProcessEnvironment::systemEnvironment().contains("DATABASE_URL")) { + return QUrl(QProcessEnvironment::systemEnvironment().value("DATABASE_URL")).userName(); + } return settingsCache->value("database/user").toString(); } QString Servatrice::getDBPasswordString() const { + if (QProcessEnvironment::systemEnvironment().contains("DATABASE_URL")) { + return QUrl(QProcessEnvironment::systemEnvironment().value("DATABASE_URL")).password(); + } return settingsCache->value("database/password").toString(); } QString Servatrice::getRoomsMethodString() const { + if (QProcessEnvironment::systemEnvironment().contains("DATABASE_URL")) { + return QString("sql"); + } return settingsCache->value("rooms/method").toString(); } @@ -953,6 +980,9 @@ QHostAddress Servatrice::getServerWebSocketHost() const int Servatrice::getServerWebSocketPort() const { + if (QProcessEnvironment::systemEnvironment().contains("PORT")) { + return QProcessEnvironment::systemEnvironment().value("PORT").toInt(); + } return settingsCache->value("server/websocket_port", 4748).toInt(); }