Compare commits
12 Commits
master
...
lab5-hiatu
Author | SHA1 | Date | |
---|---|---|---|
e65bfa501a | |||
1d5157b635 | |||
99e91324bc | |||
|
6d2533e53d | ||
|
fb36a7d13b | ||
|
f1d8b95744 | ||
|
3fa3ef13b2 | ||
|
dd189fc094 | ||
|
e341fc14b3 | ||
|
2c50dc75eb | ||
|
4df4437487 | ||
|
bee604d68e |
@ -1,100 +0,0 @@
|
|||||||
name: build-and-deploy-prod
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-cc:
|
|
||||||
runs-on: docker
|
|
||||||
services:
|
|
||||||
docker:
|
|
||||||
image: docker:dind
|
|
||||||
options: --privileged --shm-size=2g
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
||||||
steps:
|
|
||||||
- name: Clone repo
|
|
||||||
shell: sh
|
|
||||||
run: |
|
|
||||||
git init
|
|
||||||
git remote add gitea http://10.1.1.1:3000/hasslesstech/devops-lab4
|
|
||||||
git fetch gitea
|
|
||||||
git checkout gitea/master
|
|
||||||
- name: Build container
|
|
||||||
shell: sh
|
|
||||||
run: |
|
|
||||||
docker build . -f Dockerfile-cc -t 10.5.1.10:5000/prod/cc
|
|
||||||
- name: Push container
|
|
||||||
shell: sh
|
|
||||||
run: |
|
|
||||||
docker push 10.5.1.10:5000/prod/cc
|
|
||||||
|
|
||||||
build-hm:
|
|
||||||
runs-on: docker
|
|
||||||
services:
|
|
||||||
docker:
|
|
||||||
image: docker:dind
|
|
||||||
options: --privileged --shm-size=2g
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
||||||
steps:
|
|
||||||
- name: Clone repo
|
|
||||||
shell: sh
|
|
||||||
run: |
|
|
||||||
git init
|
|
||||||
git remote add gitea http://10.1.1.1:3000/hasslesstech/devops-lab4
|
|
||||||
git fetch gitea
|
|
||||||
git checkout gitea/master
|
|
||||||
- name: Build container
|
|
||||||
shell: sh
|
|
||||||
run: |
|
|
||||||
docker build . -f Dockerfile-hm -t 10.5.1.10:5000/prod/hm
|
|
||||||
- name: Push container
|
|
||||||
shell: sh
|
|
||||||
run: |
|
|
||||||
docker push 10.5.1.10:5000/prod/hm
|
|
||||||
|
|
||||||
build-map:
|
|
||||||
runs-on: docker
|
|
||||||
services:
|
|
||||||
docker:
|
|
||||||
image: docker:dind
|
|
||||||
options: --privileged --shm-size=2g
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
||||||
steps:
|
|
||||||
- name: Clone repo
|
|
||||||
shell: sh
|
|
||||||
run: |
|
|
||||||
git init
|
|
||||||
git remote add gitea http://10.1.1.1:3000/hasslesstech/devops-lab4
|
|
||||||
git fetch gitea
|
|
||||||
git checkout gitea/master
|
|
||||||
- name: Build container
|
|
||||||
shell: sh
|
|
||||||
run: |
|
|
||||||
docker build . -f Dockerfile-map -t 10.5.1.10:5000/prod/map
|
|
||||||
- name: Push container
|
|
||||||
shell: sh
|
|
||||||
run: |
|
|
||||||
docker push 10.5.1.10:5000/prod/map
|
|
||||||
|
|
||||||
deploy-all:
|
|
||||||
runs-on: hardware-x86_64
|
|
||||||
needs:
|
|
||||||
- build-cc
|
|
||||||
- build-hm
|
|
||||||
- build-map
|
|
||||||
steps:
|
|
||||||
- run: |
|
|
||||||
ssh -i ~/prod-key root@10.5.1.11 "sh -c 'rm -rf devops-lab4 ; git clone http://10.1.1.1:3000/hasslesstech/devops-lab4 && cd devops-lab4 &&
|
|
||||||
docker-compose -f docker-compose-prod.yaml up -d'"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,7 +1,11 @@
|
|||||||
src/MapClient/node_modules
|
src/MapClient/node_modules
|
||||||
|
src/MapClient/dist
|
||||||
src/CommunicationControl/.idea
|
src/CommunicationControl/.idea
|
||||||
src/CommunicationControl/.vs
|
src/CommunicationControl/.vs
|
||||||
bin
|
bin
|
||||||
obj
|
obj
|
||||||
Logs
|
Logs
|
||||||
.vscode
|
.vscode
|
||||||
|
build
|
||||||
|
src/CommunicationControl/DevOpsProject.sln.DotSettings.user
|
||||||
|
src/CommunicationControl/DevOpsProject.sln.DotSettings.user
|
||||||
|
@ -66,7 +66,5 @@ CMD sh -c "openrc default ; \
|
|||||||
rc-service hive-cc start ; \
|
rc-service hive-cc start ; \
|
||||||
rc-service hive-hm start ; \
|
rc-service hive-hm start ; \
|
||||||
rc-service hive-map start ; \
|
rc-service hive-map start ; \
|
||||||
|
sleep 96h; \
|
||||||
exec sh"
|
exec sh"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
# dotnet build environment
|
|
||||||
FROM alpine:latest as dotnet
|
|
||||||
WORKDIR /
|
|
||||||
|
|
||||||
RUN apk add git
|
|
||||||
RUN git clone https://gitlab.com/kzotkin/hiveemulator
|
|
||||||
|
|
||||||
RUN apk add dotnet8-sdk
|
|
||||||
|
|
||||||
WORKDIR /hiveemulator/src/CommunicationControl/
|
|
||||||
RUN dotnet publish DevOpsProject/DevOpsProject.CommunicationControl.API.csproj
|
|
||||||
|
|
||||||
# production environment
|
|
||||||
#FROM mcr.microsoft.com/dotnet/aspnet:8.0 as prod
|
|
||||||
FROM alpine:latest as prod
|
|
||||||
#COPY --from=dotnet /hiveemulator/src/CommunicationControl/DevOpsProject/bin/Release/net8.0/ /app/
|
|
||||||
RUN apk add aspnetcore8-runtime
|
|
||||||
RUN mkdir -p /hiveemulator/src/CommunicationControl/DevOpsProject/bin/Release/net8.0/
|
|
||||||
COPY --from=dotnet /hiveemulator/src/CommunicationControl/DevOpsProject/bin/Release/net8.0/ /hiveemulator/src/CommunicationControl/DevOpsProject/bin/Release/net8.0/
|
|
||||||
|
|
||||||
EXPOSE 8080
|
|
||||||
|
|
||||||
WORKDIR /hiveemulator/src/CommunicationControl/DevOpsProject/bin/Release/net8.0/
|
|
||||||
ENTRYPOINT ["./DevOpsProject.CommunicationControl.API"]
|
|
@ -1,23 +0,0 @@
|
|||||||
# dotnet build environment
|
|
||||||
FROM alpine:latest as dotnet
|
|
||||||
WORKDIR /
|
|
||||||
|
|
||||||
RUN apk add git
|
|
||||||
RUN git clone https://gitlab.com/kzotkin/hiveemulator
|
|
||||||
|
|
||||||
RUN apk add dotnet8-sdk
|
|
||||||
|
|
||||||
WORKDIR /hiveemulator/src/CommunicationControl/
|
|
||||||
RUN dotnet publish DevOpsProject.HiveMind.API/DevOpsProject.HiveMind.API.csproj
|
|
||||||
|
|
||||||
|
|
||||||
# production environment
|
|
||||||
#FROM mcr.microsoft.com/dotnet/aspnet:8.0 as prod
|
|
||||||
FROM alpine:latest as prod
|
|
||||||
RUN apk add aspnetcore8-runtime
|
|
||||||
RUN mkdir -p /hiveemulator/src/CommunicationControl/DevOpsProject.HiveMind.API/bin/Release/net8.0/
|
|
||||||
#COPY --from=dotnet /hiveemulator/src/CommunicationControl/DevOpsProject.HiveMind.API/bin/Release/net8.0/ /app/
|
|
||||||
COPY --from=dotnet /hiveemulator/src/CommunicationControl/DevOpsProject.HiveMind.API/bin/Release/net8.0/ /hiveemulator/src/CommunicationControl/DevOpsProject.HiveMind.API/bin/Release/net8.0/
|
|
||||||
|
|
||||||
WORKDIR /hiveemulator/src/CommunicationControl/DevOpsProject.HiveMind.API/bin/Release/net8.0/
|
|
||||||
ENTRYPOINT ["./DevOpsProject.HiveMind.API"]
|
|
@ -1,22 +0,0 @@
|
|||||||
# nodejs build environment
|
|
||||||
FROM alpine:latest as nodejs
|
|
||||||
WORKDIR /
|
|
||||||
|
|
||||||
RUN apk add git
|
|
||||||
RUN git clone https://gitlab.com/kzotkin/hiveemulator
|
|
||||||
|
|
||||||
RUN apk add npm
|
|
||||||
|
|
||||||
WORKDIR /hiveemulator/src/MapClient/
|
|
||||||
RUN npm install
|
|
||||||
RUN npm run build
|
|
||||||
RUN rm public/config.json
|
|
||||||
|
|
||||||
|
|
||||||
# production environment
|
|
||||||
FROM nginx:alpine
|
|
||||||
COPY --from=nodejs /hiveemulator/src/MapClient/dist/ /usr/share/nginx/html/
|
|
||||||
|
|
||||||
EXPOSE 80
|
|
||||||
|
|
||||||
ENTRYPOINT ["nginx", "-g", "daemon off;"]
|
|
24
README.md
24
README.md
@ -8,6 +8,11 @@
|
|||||||
- [Communiction Control](#communiction-control)
|
- [Communiction Control](#communiction-control)
|
||||||
- [Hive Mind](#hive-mind)
|
- [Hive Mind](#hive-mind)
|
||||||
- [Usage](#usage)
|
- [Usage](#usage)
|
||||||
|
- [Build](#build)
|
||||||
|
- [Map Clinet](#map-clinet)
|
||||||
|
- [Communiction Control](#communiction-control-1)
|
||||||
|
- [Hive Mind](#hive-mind-1)
|
||||||
|
- [Communiction Control](#communiction-control-2)
|
||||||
|
|
||||||
## About
|
## About
|
||||||
This is a demo project used in the Uni DevOps course
|
This is a demo project used in the Uni DevOps course
|
||||||
@ -39,7 +44,7 @@ dotnet run --project DevOpsProject/DevOpsProject.CommunicationControl.API.cspro
|
|||||||
```bash
|
```bash
|
||||||
cd src/CommunicationControl
|
cd src/CommunicationControl
|
||||||
|
|
||||||
dotnet run --project DevOpsProject/DevOpsProject.HiveMind.API.csproj
|
dotnet run --project DevOpsProject.HiveMind.API/DevOpsProject.HiveMind.API.csproj
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -54,3 +59,20 @@ dotnet run --project DevOpsProject/DevOpsProject.HiveMind.API.csproj
|
|||||||
```
|
```
|
||||||
|
|
||||||
3. Communication Control Swagger: http://localhost:8080
|
3. Communication Control Swagger: http://localhost:8080
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
### Map Clinet
|
||||||
|
cd src/MapClient
|
||||||
|
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
### Communiction Control
|
||||||
|
cd src/CommunicationControl
|
||||||
|
dotnet publish -p:PublishProfile=FolderProfile --artifacts-path=build/CommunicationControl DevOpsProject/DevOpsProject.CommunicationControl.API.csproj
|
||||||
|
|
||||||
|
### Hive Mind
|
||||||
|
### Communiction Control
|
||||||
|
cd src/CommunicationControl
|
||||||
|
dotnet publish -p:PublishProfile=FolderProfile --artifacts-path=build/HiveMind DevOpsProject/DevOpsProject.HiveMind.API.csproj
|
@ -1,39 +0,0 @@
|
|||||||
services:
|
|
||||||
redis:
|
|
||||||
image: redis:7
|
|
||||||
restart: always
|
|
||||||
networks:
|
|
||||||
- sys
|
|
||||||
|
|
||||||
cc:
|
|
||||||
image: 10.5.1.10:5000/dev/cc
|
|
||||||
restart: always
|
|
||||||
environment:
|
|
||||||
Redis__ConnectionString: "redis:6379"
|
|
||||||
ports:
|
|
||||||
- 8080:8080
|
|
||||||
networks:
|
|
||||||
- sys
|
|
||||||
depends_on:
|
|
||||||
- redis
|
|
||||||
|
|
||||||
hm:
|
|
||||||
image: 10.5.1.10:5000/dev/hm
|
|
||||||
restart: always
|
|
||||||
environment:
|
|
||||||
CommunicationConfiguration__CommunicationControlIP: "cc"
|
|
||||||
networks:
|
|
||||||
- sys
|
|
||||||
depends_on:
|
|
||||||
- cc
|
|
||||||
|
|
||||||
map:
|
|
||||||
image: 10.5.1.10:5000/dev/map
|
|
||||||
restart: always
|
|
||||||
volumes:
|
|
||||||
- ./map/config-dev.json:/usr/share/nginx/html/config.json:ro
|
|
||||||
ports:
|
|
||||||
- 80:80
|
|
||||||
|
|
||||||
networks:
|
|
||||||
sys:
|
|
@ -1,39 +0,0 @@
|
|||||||
services:
|
|
||||||
redis:
|
|
||||||
image: redis:7
|
|
||||||
restart: always
|
|
||||||
networks:
|
|
||||||
- sys
|
|
||||||
|
|
||||||
cc:
|
|
||||||
image: 10.5.1.10:5000/prod/cc
|
|
||||||
restart: always
|
|
||||||
environment:
|
|
||||||
Redis__ConnectionString: "redis:6379"
|
|
||||||
ports:
|
|
||||||
- 8080:8080
|
|
||||||
networks:
|
|
||||||
- sys
|
|
||||||
depends_on:
|
|
||||||
- redis
|
|
||||||
|
|
||||||
hm:
|
|
||||||
image: 10.5.1.10:5000/prod/hm
|
|
||||||
restart: always
|
|
||||||
environment:
|
|
||||||
CommunicationConfiguration__CommunicationControlIP: "cc"
|
|
||||||
networks:
|
|
||||||
- sys
|
|
||||||
depends_on:
|
|
||||||
- cc
|
|
||||||
|
|
||||||
map:
|
|
||||||
image: 10.5.1.10:5000/prod/map
|
|
||||||
restart: always
|
|
||||||
volumes:
|
|
||||||
- ./map/config-prod.json:/usr/share/nginx/html/config.json:ro
|
|
||||||
ports:
|
|
||||||
- 80:80
|
|
||||||
|
|
||||||
networks:
|
|
||||||
sys:
|
|
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"API": "http://10.5.1.12:8080/api/v1/client"
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"API": "http://10.5.1.11:8080/api/v1/client"
|
|
||||||
}
|
|
@ -57,11 +57,8 @@ using (var scope = app.Services.CreateScope())
|
|||||||
app.UseExceptionHandler();
|
app.UseExceptionHandler();
|
||||||
|
|
||||||
// Configure the HTTP request pipeline.
|
// Configure the HTTP request pipeline.
|
||||||
if (app.Environment.IsDevelopment())
|
app.UseSwagger();
|
||||||
{
|
app.UseSwaggerUI();
|
||||||
app.UseSwagger();
|
|
||||||
app.UseSwaggerUI();
|
|
||||||
}
|
|
||||||
|
|
||||||
app.UseCors(corsPolicyName);
|
app.UseCors(corsPolicyName);
|
||||||
|
|
||||||
|
@ -1,2 +1,4 @@
|
|||||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACorsPolicyBuilder_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Ff2b268c5e2cd9f1f915a357be6a8df853a5e36d3641a02dea9c31d924ca17a1_003FCorsPolicyBuilder_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AConnectionMultiplexer_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F777330fcb5805c27956d104ff76bca3d9647f0def3f139feed35c0ef42c745_003FConnectionMultiplexer_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACorsPolicyBuilder_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Ff2b268c5e2cd9f1f915a357be6a8df853a5e36d3641a02dea9c31d924ca17a1_003FCorsPolicyBuilder_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AExceptionDispatchInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fbf9021a960b74107a7e141aa06bc9d8a0a53c929178c2fb95b1597be8af8dc_003FExceptionDispatchInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>
|
@ -19,6 +19,8 @@ internal class Program
|
|||||||
// TODO: consider this approach
|
// TODO: consider this approach
|
||||||
builder.Services.AddJsonControllerOptionsConfiguration();
|
builder.Services.AddJsonControllerOptionsConfiguration();
|
||||||
|
|
||||||
|
string basePath = builder.Configuration.GetValue<string>("BasePath") ?? string.Empty;
|
||||||
|
|
||||||
builder.Services.AddEndpointsApiExplorer();
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
builder.Services.AddSwaggerGen(c =>
|
builder.Services.AddSwaggerGen(c =>
|
||||||
{
|
{
|
||||||
@ -41,15 +43,26 @@ internal class Program
|
|||||||
builder.Services.AddProblemDetails();
|
builder.Services.AddProblemDetails();
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
if (!string.IsNullOrEmpty(basePath))
|
||||||
|
{
|
||||||
|
var pathBase = new PathString(basePath);
|
||||||
|
app.UsePathBase(pathBase);
|
||||||
|
app.Use(async (context, next) =>
|
||||||
|
{
|
||||||
|
context.Request.PathBase = pathBase;
|
||||||
|
await next();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
app.UseExceptionHandler();
|
app.UseExceptionHandler();
|
||||||
|
|
||||||
if (app.Environment.IsDevelopment())
|
|
||||||
{
|
|
||||||
app.UseSwagger();
|
app.UseSwagger();
|
||||||
app.UseSwaggerUI();
|
app.UseSwaggerUI(c =>
|
||||||
}
|
{
|
||||||
|
c.SwaggerEndpoint($"{basePath}/swagger/v1/swagger.json", "CommunicationControl - V1");
|
||||||
|
c.RoutePrefix = $"swagger";
|
||||||
|
|
||||||
|
});
|
||||||
app.UseCors(corsPolicyName);
|
app.UseCors(corsPolicyName);
|
||||||
|
|
||||||
app.UseAuthorization();
|
app.UseAuthorization();
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
},
|
},
|
||||||
"AllowedHosts": "*",
|
"AllowedHosts": "*",
|
||||||
"Urls": "http://0.0.0.0:8080",
|
"Urls": "http://0.0.0.0:8080",
|
||||||
|
"BasePath": "",
|
||||||
"Serilog": {
|
"Serilog": {
|
||||||
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
|
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
|
||||||
"MinimumLevel": {
|
"MinimumLevel": {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user