Working on the config file
It's kind of working? Well, the program crashes due to a promise failure.
This commit is contained in:
@@ -109,4 +109,9 @@ public/*.js
|
|||||||
public/*.css
|
public/*.css
|
||||||
public/*.map
|
public/*.map
|
||||||
public/*.gz
|
public/*.gz
|
||||||
|
|
||||||
|
mysql/
|
||||||
|
Dockerfile
|
||||||
docker-compose.yml
|
docker-compose.yml
|
||||||
|
startup.sql
|
||||||
|
|
||||||
|
|||||||
-18
@@ -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"]
|
|
||||||
+44
-109
@@ -30,6 +30,7 @@ const question = (prompt, def) => {
|
|||||||
|
|
||||||
//news configuration
|
//news configuration
|
||||||
const newsName = await question('News Name', 'news');
|
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 newsDBUser = await question('News Database Username', newsName);
|
||||||
const newsDBPass = await question('News Database Password', 'charizard');
|
const newsDBPass = await question('News Database Password', 'charizard');
|
||||||
const newsKey = await question('News Query Key', 'key');
|
const newsKey = await question('News Query Key', 'key');
|
||||||
@@ -58,7 +59,7 @@ services:
|
|||||||
- "traefik.http.services.${projectName}service.loadbalancer.server.port=3000"
|
- "traefik.http.services.${projectName}service.loadbalancer.server.port=3000"
|
||||||
environment:
|
environment:
|
||||||
- WEB_PROTOCOL=https
|
- WEB_PROTOCOL=https
|
||||||
- WEB_ADDRESS=localhost
|
- WEB_ADDRESS=${projectWebAddress}
|
||||||
- WEB_PORT=3000
|
- WEB_PORT=3000
|
||||||
- MAIL_SMTP=${projectMailSMTP}
|
- MAIL_SMTP=${projectMailSMTP}
|
||||||
- MAIL_USERNAME=${projectMailUser}
|
- MAIL_USERNAME=${projectMailUser}
|
||||||
@@ -69,25 +70,26 @@ services:
|
|||||||
- DB_PASSWORD=${projectDBPass}
|
- DB_PASSWORD=${projectDBPass}
|
||||||
- DB_TIMEZONE=${databaseTimeZone}
|
- DB_TIMEZONE=${databaseTimeZone}
|
||||||
- SESSION_SECRET=secret
|
- SESSION_SECRET=secret
|
||||||
- SESSION_ADMIN=adminsecret
|
- SESSION_ADMIN=adminsecret
|
||||||
- NEWS_URI=http://news:3100/news
|
- NEWS_URI=http://${newsWebAddress}:3100/news
|
||||||
- NEWS_KEY=${newsKey}
|
- NEWS_KEY=${newsKey}
|
||||||
networks:
|
networks:
|
||||||
- app-network
|
- app-network
|
||||||
depends_on:
|
depends_on:
|
||||||
- database
|
- database
|
||||||
|
- traefik
|
||||||
|
|
||||||
news:
|
${newsName}:
|
||||||
image: krgamestudios/news-server:v1.0.0
|
image: krgamestudios/news-server:v1.0.0
|
||||||
ports:
|
ports:
|
||||||
- "3100:3100"
|
- "3100:3100"
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.newsrouter.rule=Host('${projectWebAddress}')"
|
- "traefik.http.routers.${newsName}router.rule=Host('${newsWebAddress}')"
|
||||||
- "traefik.http.routers.newsrouter.entrypoints=websecure"
|
- "traefik.http.routers.${newsName}router.entrypoints=websecure"
|
||||||
- "traefik.http.routers.newsrouter.tls.certresolver=myresolver"
|
- "traefik.http.routers.${newsName}router.tls.certresolver=myresolver"
|
||||||
- "traefik.http.routers.newsrouter.service=newsservice@docker"
|
- "traefik.http.routers.${newsName}router.service=newsservice@docker"
|
||||||
- "traefik.http.services.newsservice.loadbalancer.server.port=3100"
|
- "traefik.http.services.${newsName}service.loadbalancer.server.port=3100"
|
||||||
environment:
|
environment:
|
||||||
- WEB_PORT=3100
|
- WEB_PORT=3100
|
||||||
- DB_HOSTNAME=database
|
- DB_HOSTNAME=database
|
||||||
@@ -101,6 +103,7 @@ services:
|
|||||||
- app-network
|
- app-network
|
||||||
depends_on:
|
depends_on:
|
||||||
- database
|
- database
|
||||||
|
- traefik
|
||||||
|
|
||||||
#chat:
|
#chat:
|
||||||
# image: krgamestudios/chat-server
|
# image: krgamestudios/chat-server
|
||||||
@@ -126,7 +129,7 @@ services:
|
|||||||
- "--providers.docker.exposedbydefault=false"
|
- "--providers.docker.exposedbydefault=false"
|
||||||
- "--entrypoints.websecure.address=:443"
|
- "--entrypoints.websecure.address=:443"
|
||||||
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
|
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
|
||||||
- "--certificatesresolvers.myresolver.acme.email=${supportEmail}
|
- "--certificatesresolvers.myresolver.acme.email=${supportEmail}"
|
||||||
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
|
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
@@ -142,107 +145,39 @@ networks:
|
|||||||
driver: bridge
|
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('docker-compose.yml', yml);
|
||||||
|
fs.writeFileSync('Dockerfile', dockerfile);
|
||||||
|
fs.writeFileSync('startup.sql', scriptfile);
|
||||||
})()
|
})()
|
||||||
.then(() => rl.close())
|
.then(() => rl.close())
|
||||||
.catch(e => console.error(e))
|
.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
@@ -26,11 +26,11 @@ app.use('/api/accounts', require('./accounts'));
|
|||||||
app.use('/api/admin', require('./admin'));
|
app.use('/api/admin', require('./admin'));
|
||||||
|
|
||||||
//send static files
|
//send static files
|
||||||
app.use('/', express.static(path.resolve(__dirname, 'public')));
|
app.use('/', express.static(path.resolve(__dirname, '..', 'public')));
|
||||||
|
|
||||||
//fallback to the index file
|
//fallback to the index file
|
||||||
app.get('*', (req, res) => {
|
app.get('*', (req, res) => {
|
||||||
res.sendFile(path.resolve(__dirname, 'public' , 'index.html'));
|
res.sendFile(path.resolve(__dirname, '..', 'public' , 'index.html'));
|
||||||
});
|
});
|
||||||
|
|
||||||
//startup
|
//startup
|
||||||
|
|||||||
+2
-2
@@ -42,8 +42,8 @@ module.exports = ({ production, analyzer }) => {
|
|||||||
plugins: [
|
plugins: [
|
||||||
new DefinePlugin({
|
new DefinePlugin({
|
||||||
'process.env': {
|
'process.env': {
|
||||||
'NEWS_URI': production ? `${process.env.NEWS_KEY}` : '"http://dev-news.eggtrainer.com:3100/news"',
|
'NEWS_URI': production ? `"${process.env.NEWS_URI}"` : '"http://dev-news.eggtrainer.com:3100/news"',
|
||||||
'NEWS_KEY': production ? `${process.env.NEWS_KEY}` : 'key',
|
'NEWS_KEY': production ? `"${process.env.NEWS_KEY}"` : '"key"',
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
new CleanWebpackPlugin({
|
new CleanWebpackPlugin({
|
||||||
|
|||||||
Reference in New Issue
Block a user