Working on the config file

It's kind of working? Well, the program crashes due to a promise failure.
This commit is contained in:
2021-02-04 13:42:53 +00:00
parent e5a81c79e1
commit dafcd3b833
5 changed files with 54 additions and 132 deletions
+5
View File
@@ -109,4 +109,9 @@ public/*.js
public/*.css
public/*.map
public/*.gz
mysql/
Dockerfile
docker-compose.yml
startup.sql
-18
View File
@@ -1,18 +0,0 @@
FROM node:15
# Change working directory
WORKDIR "/app"
# Copy package.json and package-lock.json
COPY package*.json ./
# Install npm production packages
RUN npm install
COPY . /app
EXPOSE 3000
USER node
ENTRYPOINT ["npm", "start"]
+42 -107
View File
@@ -30,6 +30,7 @@ const question = (prompt, def) => {
//news configuration
const newsName = await question('News Name', 'news');
const newsWebAddress = await question('News Web Address', 'news.example.com');
const newsDBUser = await question('News Database Username', newsName);
const newsDBPass = await question('News Database Password', 'charizard');
const newsKey = await question('News Query Key', 'key');
@@ -58,7 +59,7 @@ services:
- "traefik.http.services.${projectName}service.loadbalancer.server.port=3000"
environment:
- WEB_PROTOCOL=https
- WEB_ADDRESS=localhost
- WEB_ADDRESS=${projectWebAddress}
- WEB_PORT=3000
- MAIL_SMTP=${projectMailSMTP}
- MAIL_USERNAME=${projectMailUser}
@@ -70,24 +71,25 @@ services:
- DB_TIMEZONE=${databaseTimeZone}
- SESSION_SECRET=secret
- SESSION_ADMIN=adminsecret
- NEWS_URI=http://news:3100/news
- NEWS_URI=http://${newsWebAddress}:3100/news
- NEWS_KEY=${newsKey}
networks:
- app-network
depends_on:
- database
- traefik
news:
${newsName}:
image: krgamestudios/news-server:v1.0.0
ports:
- "3100:3100"
labels:
- "traefik.enable=true"
- "traefik.http.routers.newsrouter.rule=Host('${projectWebAddress}')"
- "traefik.http.routers.newsrouter.entrypoints=websecure"
- "traefik.http.routers.newsrouter.tls.certresolver=myresolver"
- "traefik.http.routers.newsrouter.service=newsservice@docker"
- "traefik.http.services.newsservice.loadbalancer.server.port=3100"
- "traefik.http.routers.${newsName}router.rule=Host('${newsWebAddress}')"
- "traefik.http.routers.${newsName}router.entrypoints=websecure"
- "traefik.http.routers.${newsName}router.tls.certresolver=myresolver"
- "traefik.http.routers.${newsName}router.service=newsservice@docker"
- "traefik.http.services.${newsName}service.loadbalancer.server.port=3100"
environment:
- WEB_PORT=3100
- DB_HOSTNAME=database
@@ -101,6 +103,7 @@ services:
- app-network
depends_on:
- database
- traefik
#chat:
# image: krgamestudios/chat-server
@@ -126,7 +129,7 @@ services:
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
- "--certificatesresolvers.myresolver.acme.email=${supportEmail}
- "--certificatesresolvers.myresolver.acme.email=${supportEmail}"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
@@ -142,107 +145,39 @@ networks:
driver: bridge
`;
const dockerfile = `
FROM node:15
WORKDIR "/app"
WORKDIR "/app"
COPY package*.json ./
RUN npm install
RUN apt-get update
RUN apt-get install -y mariadb-client
COPY . /app
EXPOSE 3000
ENTRYPOINT ["bash", "-c"]
CMD ["mysql --host=database --user=root --password=${databaseRootPassword} < ./startup.sql && npm start"]
`;
const scriptfile = `
CREATE DATABASE IF NOT EXISTS ${projectName};
CREATE USER IF NOT EXISTS '${projectDBUser}'@'%' IDENTIFIED BY '${projectDBPass}';
GRANT ALL PRIVILEGES ON ${projectName}.* TO '${projectDBUser}'@'%';
CREATE DATABASE IF NOT EXISTS ${newsName};
CREATE USER IF NOT EXISTS '${newsDBUser}'@'%' IDENTIFIED BY '${newsDBPass}';
GRANT ALL PRIVILEGES ON ${newsName}.* TO '${newsDBUser}'@'%';
FLUSH PRIVILEGES;
`;
fs.writeFileSync('docker-compose.yml', yml);
fs.writeFileSync('Dockerfile', dockerfile);
fs.writeFileSync('startup.sql', scriptfile);
})()
.then(() => rl.close())
.catch(e => console.error(e))
;
/* Default below
services:
template:
build: .
ports:
- "3000:3000"
labels:
- "traefik.enable=true"
- "traefik.http.routers.templaterouter.rule=Host('template.com')"
- "traefik.http.routers.templaterouter.entrypoints=websecure"
- "traefik.http.routers.templaterouter.tls.certresolver=myresolver"
- "traefik.http.routers.templaterouter.service=templateservice@docker"
- "traefik.http.services.templateservice.loadbalancer.server.port=3000"
environment:
- WEB_PROTOCOL=https
- WEB_ADDRESS=localhost
- WEB_PORT=3000
- MAIL_SMTP=smtp.example.com
- MAIL_USERNAME=foobar@example.com
- MAIL_PASSWORD=foobar
- DB_HOSTNAME=database
- DB_DATABASE=template
- DB_USERNAME=template
- DB_PASSWORD=pikachu
- DB_TIMEZONE=Australia/Sydney
- SESSION_SECRET=secret
- SESSION_ADMIN=adminsecret
networks:
- app-network
depends_on:
- database
news:
image: krgamestudios/news-server:v1.0.0
ports:
- "3100:3100"
labels:
- "traefik.enable=true"
- "traefik.http.routers.newsrouter.rule=Host('template.com')"
- "traefik.http.routers.newsrouter.entrypoints=websecure"
- "traefik.http.routers.newsrouter.tls.certresolver=myresolver"
- "traefik.http.routers.newsrouter.service=newsservice@docker"
- "traefik.http.services.newsservice.loadbalancer.server.port=3100"
environment:
- WEB_PORT=3100
- DB_HOSTNAME=database
- DB_DATABASE=news
- DB_USERNAME=news
- DB_PASSWORD=charizard
- DB_TIMEZONE=Australia/Sydney
- QUERY_LIMIT=10
- QUERY_KEY=key
networks:
- app-network
depends_on:
- database
#chat:
# image: krgamestudios/chat-server
# ports:
# - "3200:3200"
database:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- ./mysql:/var/lib/mysql
networks:
- app-network
traefik:
image: "traefik:v2.4"
container_name: "traefik"
command:
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
- "--certificatesresolvers.myresolver.acme.email=postmaster@example.com"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
networks:
- app-network
networks:
app-network:
driver: bridge
*/
+2 -2
View File
@@ -26,11 +26,11 @@ app.use('/api/accounts', require('./accounts'));
app.use('/api/admin', require('./admin'));
//send static files
app.use('/', express.static(path.resolve(__dirname, 'public')));
app.use('/', express.static(path.resolve(__dirname, '..', 'public')));
//fallback to the index file
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'public' , 'index.html'));
res.sendFile(path.resolve(__dirname, '..', 'public' , 'index.html'));
});
//startup
+2 -2
View File
@@ -42,8 +42,8 @@ module.exports = ({ production, analyzer }) => {
plugins: [
new DefinePlugin({
'process.env': {
'NEWS_URI': production ? `${process.env.NEWS_KEY}` : '"http://dev-news.eggtrainer.com:3100/news"',
'NEWS_KEY': production ? `${process.env.NEWS_KEY}` : 'key',
'NEWS_URI': production ? `"${process.env.NEWS_URI}"` : '"http://dev-news.eggtrainer.com:3100/news"',
'NEWS_KEY': production ? `"${process.env.NEWS_KEY}"` : '"key"',
}
}),
new CleanWebpackPlugin({