feat(docker): dockerized and added auto upload actions
Some checks failed
Cloud Actions / Dockerhub (push) Failing after 54s
Some checks failed
Cloud Actions / Dockerhub (push) Failing after 54s
This commit is contained in:
parent
4065642393
commit
56b5463142
45
.gitea/workflows/Actions.yml
Normal file
45
.gitea/workflows/Actions.yml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# name of the workflow.
|
||||||
|
# this is optional.
|
||||||
|
name: Cloud Actions
|
||||||
|
|
||||||
|
# events that will trigger this workflow.
|
||||||
|
# here, we only have "pull_request", so the workflow will run
|
||||||
|
# whenever we create a pull request.
|
||||||
|
# other examples: [push] and [pull_request, push]
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
# each workflow must have at least one job.
|
||||||
|
# jobs run in parallel by default (we can change that).
|
||||||
|
# each job groups together a series of steps to accomplish a purpose.
|
||||||
|
jobs:
|
||||||
|
Dockerhub:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
# if: ${{ github.ref == 'refs/heads/master' || github.event.pull_request.merged == true }} # Runs if it's a push to 'main' or a merged PR to 'main'
|
||||||
|
steps:
|
||||||
|
- name: checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Login to Dockerhub # log into docker hub
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }} # Using secret for Docker username
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }} # Using secret for Docker password
|
||||||
|
id: docker-login
|
||||||
|
|
||||||
|
- name: build container image # build the container
|
||||||
|
run: docker compose build --no-cache
|
||||||
|
id: docker-build
|
||||||
|
|
||||||
|
- name: Upload to Dockerhub
|
||||||
|
run: docker push darkicewolf50/darkicewolf50cloud:latest
|
||||||
|
if: ${{ steps.docker-login.outcome == 'success' && steps.docker-build.outcome == 'success' }}
|
||||||
|
|
||||||
|
- name: Upload with Git SHA tag
|
||||||
|
run: |
|
||||||
|
docker tag darkicewolf50/darkicewolf50cloud:latest darkicewolf50/darkicewolf50cloud:${{ github.sha }}
|
||||||
|
docker push darkicewolf50/darkicewolf50cloud:${{ github.sha }}
|
@ -1,3 +1,9 @@
|
|||||||
# darkicewolf50Cloud
|
# darkicewolf50Cloud
|
||||||
|
|
||||||
My backend application, self-hosted and primarily written in Rust
|
My backend application, self-hosted and primarily written in Rust
|
||||||
|
|
||||||
|
This is a mirror of the repo, live code is hosted [here](https://gitea.bajacloud.duckdns.org/darkicewolf50/darkicewolf50Cloud) as well as any testing of the code.
|
||||||
|
|
||||||
|
I do not consent for this code to be used in any training data for AI or AI like products or services.
|
||||||
|
|
||||||
|
This is only uploaded here so that I can bet those sweet sweet green marks on my gituhb profile.
|
||||||
|
11
docker-compose.yaml
Normal file
11
docker-compose.yaml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
services:
|
||||||
|
bajacloud:
|
||||||
|
container_name: darkicewolf50cloud
|
||||||
|
image: darkicewolf50/darkicewolf50cloud:latest
|
||||||
|
# restart: unless-stopped
|
||||||
|
build: . # do not include in delpoyment version
|
||||||
|
ports:
|
||||||
|
- 5050:8000
|
||||||
|
volumes:
|
||||||
|
- ./database:/database
|
||||||
|
- ./blogs:/blogs
|
24
dockerfile
Normal file
24
dockerfile
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# ----------- Build Stage -----------
|
||||||
|
FROM rust:1.87-slim AS builder
|
||||||
|
|
||||||
|
WORKDIR /darkicewolf50_cloud
|
||||||
|
|
||||||
|
# Install build dependencies
|
||||||
|
RUN apt-get update && apt-get install -y pkg-config libssl-dev && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Copy source and build
|
||||||
|
COPY . .
|
||||||
|
RUN cargo build --release
|
||||||
|
|
||||||
|
# ----------- Runtime Stage -----------
|
||||||
|
FROM debian:bookworm-slim
|
||||||
|
|
||||||
|
# Install runtime dependencies (e.g., for OpenSSL if needed)
|
||||||
|
RUN apt-get update && apt-get install -y libssl-dev ca-certificates && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
WORKDIR /darkicewolf50_cloud
|
||||||
|
COPY --from=builder /darkicewolf50_cloud/target/release/darkicewolf50_cloud .
|
||||||
|
|
||||||
|
EXPOSE 8000
|
||||||
|
CMD ["./darkicewolf50_cloud"]
|
||||||
|
|
@ -42,7 +42,7 @@ struct TechDes {
|
|||||||
#[get("/skills")]
|
#[get("/skills")]
|
||||||
pub async fn skills_home(req: HttpRequest) -> impl Responder {
|
pub async fn skills_home(req: HttpRequest) -> impl Responder {
|
||||||
log_incoming(req, "GET", "/skills");
|
log_incoming(req, "GET", "/skills");
|
||||||
let raw_yaml: String = fs::read_to_string("./data_txt/skill_level.yaml").unwrap();
|
let raw_yaml: String = fs::read_to_string("/database/skill_level.yaml").unwrap();
|
||||||
// .expect("Cannot open file or missing file.");
|
// .expect("Cannot open file or missing file.");
|
||||||
let vec_yaml = yaml_rust2::YamlLoader::load_from_str(&raw_yaml).unwrap()[0].clone();
|
let vec_yaml = yaml_rust2::YamlLoader::load_from_str(&raw_yaml).unwrap()[0].clone();
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ pub async fn project(limit: web::Path<usize>, req: HttpRequest) -> impl Responde
|
|||||||
|
|
||||||
let limit = limit.into_inner();
|
let limit = limit.into_inner();
|
||||||
|
|
||||||
let raw_yaml: String = fs::read_to_string("./data_txt/projects.yaml").unwrap();
|
let raw_yaml: String = fs::read_to_string("/database/projects.yaml").unwrap();
|
||||||
let vec_yaml = yaml_rust2::YamlLoader::load_from_str(&raw_yaml).unwrap()[0].clone();
|
let vec_yaml = yaml_rust2::YamlLoader::load_from_str(&raw_yaml).unwrap()[0].clone();
|
||||||
|
|
||||||
let raw_vec: Vec<ProjectDes> = vec_yaml
|
let raw_vec: Vec<ProjectDes> = vec_yaml
|
||||||
@ -130,7 +130,7 @@ pub async fn get_blog(
|
|||||||
) -> impl Responder {
|
) -> impl Responder {
|
||||||
log_incoming(req, "GET", "/blogs/blog/{blog_name}");
|
log_incoming(req, "GET", "/blogs/blog/{blog_name}");
|
||||||
let blog_name = blog_name.into_inner();
|
let blog_name = blog_name.into_inner();
|
||||||
let file_path = format!("./data_txt/blogs/{blog_name}.md");
|
let file_path = format!("/blogs/{}.md", blog_name);
|
||||||
let path = Path::new(&file_path);
|
let path = Path::new(&file_path);
|
||||||
|
|
||||||
let Ok(blog_text) = fs::read_to_string(&path) else {
|
let Ok(blog_text) = fs::read_to_string(&path) else {
|
||||||
@ -180,7 +180,7 @@ pub async fn get_blogs_preview(props: web::Path<(u8, u32)>, req: HttpRequest) ->
|
|||||||
let (num_limit, page_num) = props.into_inner();
|
let (num_limit, page_num) = props.into_inner();
|
||||||
|
|
||||||
let mut available_blogs: Vec<String> = Vec::new();
|
let mut available_blogs: Vec<String> = Vec::new();
|
||||||
let dir = Path::new("./data_txt/blogs");
|
let dir = Path::new("/blogs");
|
||||||
if dir.is_dir() {
|
if dir.is_dir() {
|
||||||
for entry in fs::read_dir(dir).unwrap() {
|
for entry in fs::read_dir(dir).unwrap() {
|
||||||
let entry = entry
|
let entry = entry
|
||||||
|
Loading…
x
Reference in New Issue
Block a user