Working.
This commit is contained in:
@@ -1,14 +1,11 @@
|
|||||||
# Create final image
|
# Create final image
|
||||||
FROM alpine:latest
|
FROM debian:latest
|
||||||
|
|
||||||
ARG TARGETOS
|
ARG TARGETOS
|
||||||
ARG TARGETARCH
|
ARG TARGETARCH
|
||||||
|
|
||||||
# Copy binary from builder
|
# Copy binary from builder
|
||||||
|
|
||||||
RUN apk update && apk add --no-cache curl bash wget gzip && rm -rf /var/cache/apk/*
|
|
||||||
|
|
||||||
|
|
||||||
RUN mkdir -p /sos
|
RUN mkdir -p /sos
|
||||||
|
|
||||||
COPY --chmod=0755 exe/simple_object_storage-${TARGETOS}-${TARGETARCH} /sos/sos
|
COPY --chmod=0755 exe/simple_object_storage-${TARGETOS}-${TARGETARCH} /sos/sos
|
||||||
|
13
build.sh
13
build.sh
@@ -47,9 +47,16 @@ cp ${EXE_DIR}/simple_object_storage-linux-x86_64 ${EXE_DIR}/simple_object_storag
|
|||||||
echo "amd64 executable: ./simple_object_storage-linux-amd64"
|
echo "amd64 executable: ./simple_object_storage-linux-amd64"
|
||||||
echo "arm64 executable: ./simple_object_storage-linux-arm64"
|
echo "arm64 executable: ./simple_object_storage-linux-arm64"
|
||||||
|
|
||||||
echo "Setting up Docker BuildX"
|
echo "Setting up Docker BuildX builder 'sosbuilder'"
|
||||||
docker buildx create --name mybuilder --use || true
|
# Check if builder instance exists
|
||||||
|
if ! docker buildx inspect sosbuilder > /dev/null 2>&1; then
|
||||||
|
echo "Builder 'sosbuilder' not found, creating..."
|
||||||
|
docker buildx create --name sosbuilder
|
||||||
|
else
|
||||||
|
echo "Builder 'sosbuilder' already exists."
|
||||||
|
fi
|
||||||
|
# Ensure the builder is used
|
||||||
|
docker buildx use sosbuilder
|
||||||
echo "Building multi-platform Docker image"
|
echo "Building multi-platform Docker image"
|
||||||
docker buildx build --push -t gitea.jde.nz/j/simple-object-storage:latest --platform linux/amd64,linux/arm64 .
|
docker buildx build --push -t gitea.jde.nz/j/simple-object-storage:latest --platform linux/amd64,linux/arm64 .
|
||||||
|
|
||||||
|
@@ -17,6 +17,11 @@ bool load_config(const std::string& config_path, ServerConfig& config) {
|
|||||||
nlohmann::json j;
|
nlohmann::json j;
|
||||||
file >> j;
|
file >> j;
|
||||||
|
|
||||||
|
config.host = "0.0.0.0";
|
||||||
|
config.port = 8123;
|
||||||
|
config.object_store_path = "/data/storage";
|
||||||
|
config.write_tokens = {};
|
||||||
|
|
||||||
// Parse write tokens
|
// Parse write tokens
|
||||||
if (j.contains("write_tokens")) {
|
if (j.contains("write_tokens")) {
|
||||||
config.write_tokens = j["write_tokens"].get<std::vector<std::string>>();
|
config.write_tokens = j["write_tokens"].get<std::vector<std::string>>();
|
||||||
|
@@ -11,7 +11,7 @@ struct ServerConfig {
|
|||||||
std::vector<std::string> write_tokens;
|
std::vector<std::string> write_tokens;
|
||||||
std::filesystem::path object_store_path;
|
std::filesystem::path object_store_path;
|
||||||
std::string host = "0.0.0.0";
|
std::string host = "0.0.0.0";
|
||||||
uint16_t port = 80;
|
uint16_t port = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool load_config(const std::string& config_path, ServerConfig& config);
|
bool load_config(const std::string& config_path, ServerConfig& config);
|
||||||
|
34
src/main.cpp
34
src/main.cpp
@@ -8,34 +8,20 @@ namespace simple_object_storage {
|
|||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
std::filesystem::path config_path = "/data/sos_config.json";
|
std::filesystem::path system_config_path = "/data/sos_config.json";
|
||||||
if (!std::filesystem::exists(config_path))
|
std::filesystem::path user_config_path = std::filesystem::path(std::getenv("HOME")) / ".config/simple_object_storage/config.json";
|
||||||
config_path = std::filesystem::path(std::getenv("HOME")) / ".config/simple_object_storage/config.json";
|
|
||||||
|
|
||||||
if (!std::filesystem::exists(config_path))
|
std::filesystem::path config_path;
|
||||||
std::filesystem::create_directories(config_path.parent_path());
|
if (std::filesystem::exists(system_config_path)) config_path = system_config_path;
|
||||||
|
else if (std::filesystem::exists(user_config_path)) config_path = user_config_path;
|
||||||
|
else {
|
||||||
|
std::cout << "No config file found. Checked " << system_config_path << " and " << user_config_path << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
ServerConfig config;
|
ServerConfig config;
|
||||||
if (!simple_object_storage::load_config(config_path, config)) {
|
if (!simple_object_storage::load_config(config_path, config)) {
|
||||||
// output default config using heredoc to config_path
|
std::cout << "Config file at " << config_path << " is not valid." << std::endl;
|
||||||
std::ofstream config_file(config_path);
|
|
||||||
config_file << R"END(
|
|
||||||
{
|
|
||||||
"write_tokens": [
|
|
||||||
"fizzle1",
|
|
||||||
"fizzle2",
|
|
||||||
"fizzle3"
|
|
||||||
],
|
|
||||||
"object_store_path": "/home/j/.simple_object_storage/",
|
|
||||||
"host": "0.0.0.0",
|
|
||||||
"port": 8123
|
|
||||||
}
|
|
||||||
)END";
|
|
||||||
config_file.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!simple_object_storage::load_config(config_path, config)) {
|
|
||||||
std::cerr << "Failed to load configuration at "<<config_path << std::endl;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -79,11 +79,9 @@ bool Server::validate_write_request(const httplib::Request &req, httplib::Respon
|
|||||||
|
|
||||||
Server::Server(const ServerConfig& config)
|
Server::Server(const ServerConfig& config)
|
||||||
: config_(config), running_(false) {
|
: config_(config), running_(false) {
|
||||||
// Ensure object store directory exists
|
|
||||||
try {
|
if (!std::filesystem::exists(config_.object_store_path)) {
|
||||||
std::filesystem::create_directories(config_.object_store_path);
|
std::cerr << "Object store directory does not exist: " << config_.object_store_path << std::endl;
|
||||||
} catch (const std::filesystem::filesystem_error& e) {
|
|
||||||
std::cerr << "Failed to create object store directory: " << config_.object_store_path << " - " << e.what() << std::endl;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user