add docker-compose, open port in firewall

This commit is contained in:
Jurgis Sakalauskas
2024-05-03 15:42:31 +03:00
parent 65763d4a33
commit 416f048421
9 changed files with 86 additions and 16 deletions
+7
View File
@@ -60,4 +60,11 @@ export class DockerContainer {
ip: dataRaw[6],
}
}
async setOpenFirewallPort(port: number) {
const {exitCode: exit0} = await this.exec(`iptables -A INPUT -i tun0 -p tcp --dport ${port} -j ACCEPT`);
const {exitCode: exit1} = await this.exec(`iptables -A INPUT -i tun0 -p udp --dport ${port} -j ACCEPT`);
return exit0 === 0 && exit1 === 0;
}
}
+16 -2
View File
@@ -20,8 +20,14 @@ export async function setPortFlow() {
settings.dockerTransmission.cwd,
settings.dockerTransmission.serviceName
);
const gluetunContainer = new DockerContainer(
settings.dockerGluetun.service,
settings.dockerGluetun.cwd,
settings.dockerGluetun.serviceName
);
try {
await doSetPortFlow(transmissionClient, transmissionContainer);
await doSetPortFlow(transmissionClient, transmissionContainer, gluetunContainer);
} catch (e) {
console.error('Error in set port flow', e);
await downTransmission(transmissionContainer, `Shutting down: error in set port flow.`);
@@ -29,7 +35,7 @@ export async function setPortFlow() {
await dailyCheckIn();
}
async function doSetPortFlow(transmissionClient: Transmission, transmissionContainer: DockerContainer) {
async function doSetPortFlow(transmissionClient: Transmission, transmissionContainer: DockerContainer, gluetunContainer: DockerContainer) {
console.log('Starting set port flow');
const containerState = await transmissionContainer.getState();
@@ -102,6 +108,14 @@ async function doSetPortFlow(transmissionClient: Transmission, transmissionConta
}
console.log(`Setting port to ${newPort}`);
const resultOK = await gluetunContainer.setOpenFirewallPort(newPort);
if (!resultOK) {
return await downTransmission(
transmissionContainer,
`Shutting down: could not open new port in gluetun firewall`,
);
}
console.log(`Port in gluetun firewall opened successfully`);
await transmissionClient.setPort(newPort);
const numPortsChanged = kvDataStorage.get<number>('numPortsChanged') || 0;
+6 -1
View File
@@ -1,5 +1,5 @@
import dotenv from 'dotenv';
dotenv.config();
dotenv.config({ path: '.env.app'});
export const settings = {
ipInfoCommand: `curl ${process.env.IP_INFO_URL ?? 'https://ipinfo.io'}`,
@@ -13,6 +13,11 @@ export const settings = {
service: process.env.DOCKER_TRANSMISSION_SERVICE ?? 'transmission',
serviceName: process.env.DOCKER_TRANSMISSION_SERVICE_NAME ?? process.env.DOCKER_TRANSMISSION_SERVICE,
},
dockerGluetun: {
cwd: process.env.DOCKER_GLUETUN_CWD ?? __dirname,
service: process.env.DOCKER_GLUETUN_SERVICE ?? 'gluetun',
serviceName: process.env.DOCKER_GLUETUN_SERVICE_NAME ?? process.env.DOCKER_GLUETUN_SERVICE,
},
allowedInterfaces: process.env.ALLOWED_INTERFACES?.split(',') ?? [],
disallowedCountries: process.env.DISALLOWED_COUNTRIES?.split(',') ?? [],
disallowedIntIps: process.env.DISALLOWED_INTERNAL_IPS?.split(',') ?? [],